package com.tbit.main.service;

import com.tbit.main.pojo.Agent;
import com.tbit.main.pojo.Battery;
import com.tbit.main.pojo.BatteryGroupReturn;
import com.tbit.main.pojo.PowerChangeLogSta;

import java.util.List;

/**
 * @author LMY
 * @create 2021-05-27 11:47
 * 电池管理
 */
public interface BatteryService {
    /**
     * 根据电池编号批量查询
     *
     * @param batterNOs
     * @return
     */
    List<Battery> getBatteryNOs(List<String> batterNOs);

    /**
     * 修改电池编号状态
     */
    void updateState(List<String> batterNOs, Integer accountUserId, Integer state);

    /**
     * 修改电池编号状态
     */
    void updateIdState(String batteryNO, String userCode, Integer accountUserId, Integer state, String remark);

    /**
     * 修改电池编号状态
     */
    void updateIdStateCode(String batteryNO, String userCode, Integer accountUserId, Integer state);

    /**
     * 修改电池编号状态
     */
    void updateIdStateCode(String batteryNO, String userCode, Integer machineId);

    /**
     * 根据电池编号查询
     *
     * @param batterNO
     * @return
     */
    Battery getByNO(String batterNO);

    /**
     * 按时间分组统计
     */
    public List<PowerChangeLogSta> groupByTime(Integer agentId, Integer userType, Integer usermainId, Integer state, String startTime, String endTime);

    /**
     * 根据时间查询
     */
    public List<Battery> getByTime(Integer accountId, Integer userMainId, Integer state, String startTime, String endTime);

    /**
     * 添加
     */
    void insert(Battery battery);

    /**
     * 根据运营区域查询，不查询丢失电池
     */
    List<Battery> getByAccountId(Integer accountId, Integer state, Integer batteryModelId, Integer rowCount, Integer pageNO);

    /**
     * 根据运营区域查询，不查询丢失电池,总数
     */
    Integer getByAccountIdCount(Integer accountId, Integer state, Integer batteryModelId);

    /**
     * 根据区域，状态，人员查询
     */
    List<Battery> getByAccountIdReturn(Integer state, Integer accountUserId, Integer accountId);

    /**
     * 查询丢失电池
     */
    List<Battery> getByAccountIdLose(Integer accountId);


    /**
     * 根据电池id查询
     */
    Battery getBatteryId(Integer batteryId);

    /**
     * 删除
     */
    void del(Integer batterId);

    /**
     * 查询所有
     */
    List<Battery> getAll();

    /**
     * 根据区域查看电池状态分组
     */
    List<BatteryGroupReturn> stateGroup(Integer accountId);

    /**
     * 根据区域查看人员状态分组
     */
    List<BatteryGroupReturn> userIdGroup(Integer accountId);

    /**
     * 根据车辆编号查询
     */
    Battery getByUserCode(String userCode);

    /**
     * 查询出库未分组电池
     */
    List<Battery> getNotGroup(Integer accountId);

    /**
     * 根据id查询
     */
    Battery getByMachineId(Integer machineId);

    /**
     * 根据id查询
     */
    List<Battery> getByMachineIds(List<Integer> machineId);

    /**
     * 权限判断
     *
     * @param agents
     * @param batteryId
     */
    void auth(List<Agent> agents, Integer batteryId);
}
